package com.example.demo.utils;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;


/**
 * 用于处理树的一些基本操作，比如获取树的层级，树的nodeId分析
 * @author fjh
 */
@Service
@RequiredArgsConstructor
public class UnitTreeSolveData {
   //String result=temp1.getLabelId("1-2-3-3-4-123-22-",5);用于获取第五个-与第6个-中间的数字
    public int  getLabelId(String str,Integer n) throws Exception{
        // 检查输入的字符串和n是否有效
        if (str == null || n < 0) {
            return -1;
        }
        if(n==0){
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)=='-'){
                    return Integer.parseInt(str.substring(0,i));
                }
            }
        }
        int firstIndex=0;
        int lastIndex=0;
        int count=0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='-'){
                firstIndex=lastIndex;
                lastIndex=i;
                count++;
            }
            if(count==n+1){
                break;
            }
        }
        //输入不合法数据
        if(count!=n&&count!=n+1){
            return -1;
        }
        return Integer.parseInt(str.substring(firstIndex+1, lastIndex));
    }
    //用于获得某个节点后的子节点字符串
    //    1-2-3-,2 的结果是1-2-3 用于模糊查找某一结点下的所有子节点
    //1- ,0 返回的是1-
    public    String  getChildrenNodeId(String str,Integer n){
        // 检查输入的字符串和n是否有效
        if (str == null || n < 0) {
            return null;
        }
        if(n==0){
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)=='-'){
                    return str.substring(0,i+1);
                }
            }
//            return "";
        }
        int lastIndex=0;
        int count=0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='-'){
                lastIndex=i;
                count++;
            }
            if(count==n+1){
                break;
            }
        }
        //输入不合法数据
        if(count!=n&&count!=n+1){
            return null;
        }
        return str.substring(0,lastIndex+1);
    }
    //分割nodeId，获得后半部分
    public String spiltNodeIdForChildren(String str, Integer n){
        if(n==0){
            return str;
        }else{
            int count=0;
            int index=-1;
            for(int i=0;i<str.length();i++) {
                if(str.charAt(i)=='-'){
                    count++;
                }
                if(count==n){
                    index=i;
                    break;
                }
            }
            return str.substring(index+1);
        }
    }
    //统计level的等级
    public int getLevel(String str){
        int count=0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)=='-'){
                count++;
            }
        }
        return count-1;
    }
    //替换掉最后一个数字
    public String replaceLastStr(String str,String replace){
        int beginIndex=-1;
        int lastIndex=-1;
        int flag=1;
        for(int i=str.length()-1;i>=0;i--){
            if(str.charAt(i) == '-'){
                if(flag==1){
                    lastIndex=i;
                    flag=2;
                }else if (flag==2){
                    beginIndex=i;
                    flag=3;
                    break;
                }
            }
        }
        if(flag==3){
            String beforePart=str.substring(0,beginIndex);
            return beforePart+"-"+replace+"-";
        }
        return null;
    }
}
